2006-10-03 Matthias Clasen <mclasen@redhat.com>
+ Fix interaction of GtkEntryCompletion with input
+ methods. (#354495, Diego Escalante Urrelo)
+
+ * gtk/gtkentry.c (gtk_entry_completion_key_press): Only reset
+ the im context if we actually handle the key event.
+
+ * gtk/gtkentrycompletion.c: Also propagate key release events
+ to the entry.
+
+2006-10-03 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintsettings.c (gtk_print_settings_get_duplex):
Fix a typo. (#359052, Ghee Teo)
if (!GTK_WIDGET_MAPPED (completion->priv->popup_window))
return FALSE;
- _gtk_entry_reset_im_context (GTK_ENTRY (widget));
-
matches = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL);
if (completion->priv->actions)
}
else if (event->keyval == GDK_Escape)
{
+ _gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
return TRUE;
GtkDirectionType dir = event->keyval == GDK_ISO_Left_Tab ?
GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
+ _gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
gtk_widget_child_focus (gtk_widget_get_toplevel (widget), dir);
event->keyval == GDK_KP_Enter ||
event->keyval == GDK_Return)
{
+ _gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
if (completion->priv->current_selected < matches)
{
GtkTreePath *path;
+ _gtk_entry_reset_im_context (GTK_ENTRY (widget));
+
path = gtk_tree_path_new_from_indices (completion->priv->current_selected - matches, -1);
g_signal_emit_by_name (completion, "action_activated",
static gboolean gtk_entry_completion_visible_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data);
-static gboolean gtk_entry_completion_popup_key_press (GtkWidget *widget,
+static gboolean gtk_entry_completion_popup_key_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data);
static gboolean gtk_entry_completion_popup_button_press (GtkWidget *widget,
priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_set_resizable (GTK_WINDOW (priv->popup_window), FALSE);
g_signal_connect (priv->popup_window, "key_press_event",
- G_CALLBACK (gtk_entry_completion_popup_key_press),
+ G_CALLBACK (gtk_entry_completion_popup_key_event),
+ completion);
+ g_signal_connect (priv->popup_window, "key_release_event",
+ G_CALLBACK (gtk_entry_completion_popup_key_event),
completion);
g_signal_connect (priv->popup_window, "button_press_event",
G_CALLBACK (gtk_entry_completion_popup_button_press),
}
static gboolean
-gtk_entry_completion_popup_key_press (GtkWidget *widget,
+gtk_entry_completion_popup_key_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data)
{